package com.kun.dd.datasource;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

/**
 * @author fangkun
 * @create 2023-05-08-16:47
 */
@Component
public class DynamicDataSource extends AbstractRoutingDataSource {

    public DynamicDataSource(LoadDataSource loadDataSource){
        //1.设置所有数据源
        Map<String, DataSource> allDS = loadDataSource.loadAllDataSource();
        super.setTargetDataSources(new HashMap<>(allDS));
        //2.设置默认数据源(有些没有标注解的方法使用)
        super.setDefaultTargetDataSource(allDS.get(DSType.DEFAULT_DS_NAME));
        //3
        super.afterPropertiesSet();
    }

    /**
     * 系统需要获取数据源时，会自动调用该方法返回数据源名称
     * @return
     */
    @Override
    protected Object determineCurrentLookupKey() {
        return DynamicDataSourceContextHolder.getDSType();
    }
}
